package com.songlanyun.modules.supplychainapi.controller;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import com.songlanyun.common.supplychainapi.goods.ApiGoodsCommon;
import com.songlanyun.common.supplychainapi.goods.model.GoodsCategoryResult;
import com.songlanyun.common.supplychainapi.goods.model.GoodsDetailResult;
import com.songlanyun.common.supplychainapi.goods.model.GoodsPageResult;
import com.songlanyun.common.utils.PageUtils;
import com.songlanyun.common.utils.R;
import com.songlanyun.common.validator.ValidatorUtils;
import com.songlanyun.modules.goods.model.dto.PullChainGoodsDto;
import com.songlanyun.modules.goods.service.GoodsService;
import com.songlanyun.modules.user.controller.AbstractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("admin/supplychain/goods")
public class SupplyChainGoodsAdminController extends AbstractController {

    @Autowired
    private ApiGoodsCommon apiGoodsCommon;

    @Autowired
    private GoodsService goodsService;

    /**
     *
     * 在线选品的列表
     * page number 必需 页码
     *
     * search_words string 关键字搜素
     *
     * limit number 必需 条数
     *
     * source number 平台来源1云仓2京东6阿里巴巴7天猫 8 苏宁 11 华南一仓12特卖一仓14华东一仓15淘宝16跨境一仓
     *
     * category_id number 分类id
     *
     * brand_ids array[number] 品牌id
     *
     * agreement_price object {from:xx,to:xx} 协议价（元） from number 区间开始 to number 区间结束
     *
     * guide_price object {from:xx,to:xx} 指导价（元） from number 区间开始 to number 区间结束
     *
     * activity_price object {from:xx,to:xx} 营销价（元） from number 区间开始 to number 区间结束
     *
     * promotion_rate  object {from:xx,to:xx} 常规利润率（元） from number 区间开始 to number 区间结束
     *
     * activity_rate object {from:xx,to:xx} 营销利润率（元） from number 区间开始 to number 区间结束
     *
     * profits object {from:xx,to:xx} 利润区间（元） from number 区间开始 to number 区间结束
     *
     * created_time {from:xx,to:xx} 添加时间区间（元） from number 添加时间开始区间 to number 添加时间结束区间
     *
     * type string 排序类型agreement_price协议价，guide_price指导价，activity_price营销价，promotion_rate常规利润率，activity_rate营销利润率。created_time最新上架,real_month_sale本月销量
     *
     * sort string  desc倒序asc正序
     *
     * is_free_shipping number  0不包邮1包邮-1全部
     *
     * shop_words string 店铺id店铺名称
     *
     * group_id number 营销活动id
     *
     * recommend number 默认为1，1代表精选商品，2代表全部商品
     *
     * goods_type number 当平台来源为京东时默认包含京东自营和厂直，1代表京东自营0厂直
     *
     * @param params
     * @return
     */
    @PostMapping("/page")
    public R page(@RequestBody Map<String, Object> params) {
        GoodsPageResult goodsPageResult = apiGoodsCommon.questGoodsLists(params);
        List<GoodsPageResult.List> list = CollectionUtil.list(false, goodsPageResult.getList());
        list.forEach(o->{
            Integer num = goodsService.getThirdNum(getShopId(),o.getId());
            o.setPull(num>0);

        });
        return R.ok().put("page",  new PageUtils(list,goodsPageResult.getCount(),
                MapUtil.getInt(params,"limit",10),
                MapUtil.getInt(params,"page",1)));
    }

    /**
     * 商品拉取
     * @param dto
     * @return
     */
    @PostMapping("/pull")
    public R download(@RequestBody PullChainGoodsDto dto) {
        ValidatorUtils.validateEntity(dto);
        dto.setShopId(getShopId(true));
        HashMap<String, Object> params = new HashMap<>();
        params.put("id",dto.getThirdSpuId());
        GoodsDetailResult goodsDetailResult = apiGoodsCommon.questGoodsDetail(params);
        dto.setGoodsDetailResult(goodsDetailResult);
        goodsService.pullThirdGoods(dto);
        return R.ok();
    }



    /**
     * 获取商品详情
     * id 商品spu id(商品列表中的id字段)
     * @param params
     * @return
     */
    @GetMapping("/info")
    public R info(@RequestParam Map<String, Object> params) {
        GoodsDetailResult goodsDetailResult = apiGoodsCommon.questGoodsDetail(params);
        return R.ok().put("data",  goodsDetailResult);
    }

    /**
     *  获取逐级类目
     *  @param params
     *  parent_id  默认0代表一级 （父级分类id）
     *  source 来源0聚合分类1云仓2京东6阿里巴巴7天猫11华南一仓14华东一仓15淘宝
     * @return
     */
    @GetMapping("/questCategoryList")
    public R questGoodsCategoryList(@RequestParam Map<String, Object> params) {
        GoodsCategoryResult[] goodsCategoryResult = apiGoodsCommon.questGoodsCategoryList(params);
        return R.ok().put("data",  goodsCategoryResult);
    }
}
